//路由控制器层

const md5 = require("md5")
//导入API层
let api = require(baseName + '/API/api.js')
//导入发邮件方法
let sendEmail = require(baseName + '/utils/utils.js')
let code = '' //定义一个验证码：用来存储nodemailer模块给前台发送的验证码

//导入token模块
let {
    signToken
} = require(baseName + '/utils/signToken.js')

class RoutesController {
    //注册
    register(req, res) {
        // console.log(req.body);
        //双重md5加盐
        let md5pwd = md5(md5(req.body.userpassword) + config.md5salt.salt)

        //获取验证码：
        let userCode = req.body.checkcode
        // console.log(userCode);
        //前端注册前先判断用户验证码是否等于nodemailer模块发送给他的那个，如果不是就没有必要查询数据库比对了。
        if (userCode != code) {
            return
        }
        //向数据库中写入注册数据
        // Model.User.create({
        //     userId,
        //     userEmail: req.body.useremail,
        //     userpassword: md5pwd,
        //     nickName: req.body.nickname
        // }).then(result => {
        //     console.log(result);
        // })
        let yourObj = {
            userId: 'u_' + new Date().getTime(),
            userEmail: req.body.useremail,
            userPassword: md5pwd,
            nickName: req.body.nickname
        }

        //向数据库写入数据前，先看数据库有没有该数据
        api.findData('User', {
            userEmail: req.body.useremail
        }, ['userId']).then(result => {
            // console.log(result);
            if (result.length === 0) { //表示数据库没有该数据
                api.createData('User', yourObj).then(result => {
                    res.send({
                        status: 200,
                        msg: 'ok'
                    })
                }).catch(err => {
                    console.log(err);
                })
            } else {
                res.send({
                    status: 202,
                    msg: '你的邮箱已经被注册'
                })
            }
        }).catch(err => {
            console.log(err);
        })

    }

    //获取邮箱验证码
    postEmailCode(req, res) {
        let email = req.body.email
        //随机生成一个验证码，调用nodemailer模块给前端发送验证码
        code = Math.random().toString().substr(2, 6)
        sendEmail(email, code, (err, data) => {
            if (err) {
                res.send({
                    status: 201,
                    msg: '邮箱发送失败！请从新发现'
                })
                return
            }
            // console.log(data);
            res.send({
                status: 200,
                msg: '验证码以发送到您的邮箱'
            })
        })

    }

    //登录
    login(req, res) {
        //向数据库查询数据和前端发来的数据对比
        api.findData('User', {
            userEmail: req.body.useremail
        }, ['userEmail', 'userPassword']).then(result => {
            // console.log(result);
            if (result.length === 0) {
                res.send({
                    status: 202,
                    msg: '该邮箱还未注册！'
                })
                return
            }
            let md5pwd = md5(md5(req.body.userpassword) + config.md5salt.salt)
            let yourpwd = result[0].dataValues.userPassword;
            if (md5pwd === yourpwd) {
                //登录成功，生成token返回给前端
                let token = signToken(req.body.useremail, '7d')
                res.send({
                    status: 200,
                    msg: '验证登录成功！',
                    token
                })
            } else {
                res.send({
                    status: 202,
                    msg: '用户密码不正确！'
                })
            }
            // console.log(4444444);
        }).catch(err => {
            console.log(err);
        })
    }
}

module.exports = new RoutesController()